import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.DefaultListModel;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.HashMap;
import java.util.SortedMap;

import javax.swing.SwingConstants;
import javax.swing.JComboBox;
import javax.swing.JList;
import javax.swing.ScrollPaneConstants;
import java.awt.Component;
import javax.swing.Box;
import java.awt.Font;
/**
 * Fenêtre de saisie d'un ouvrage 
 * Code du JFrame généré par Window Builder/Swing Designer.
 * @author IUT,  A.Culet 
 * @version 1.0
 */
@SuppressWarnings("unused")
public class VueSaisieOuvrage extends Vue {

	private JPanel contentPane;
	private JTextField textFieldIsbn ;
	private JTextField textFieldTitre;
	private JTextField textFieldDate;
	private JTextField textFieldEditeur;
	private JButton buttonEnreg;
	private JButton buttonAnnuler;
	private JLabel lblMotsCles;
	
	//pour affichage et selection des mots cles
	DefaultListModel dlm = new DefaultListModel();
	DefaultListModel dlmAuteur = new DefaultListModel();
	private JList listMotcle;
	private JButton btnAjoutMotcle;
	private JTextField textFieldMot;
	private JButton btnSupprimer;
	
	
	private JTextField textFieldNom;
	private JTextField textFieldPrenom;
	private JList listAuteur;

	/**
	 * Create the frame.
	 */
	public VueSaisieOuvrage(Controleur controleur) {
		super(controleur);
		setTitle("Enregistrement d'un nouvel ouvrage");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
		setBounds(100, 100, 520, 740);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblNewLabel = new JLabel("Isbn");
		lblNewLabel.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel.setBounds(99, 32, 61, 15);
		contentPane.add(lblNewLabel);
		
		textFieldIsbn = new JTextField();
		textFieldIsbn.setBounds(170, 32, 141, 19);
		contentPane.add(textFieldIsbn);
		textFieldIsbn.setColumns(10);
		
		JLabel lblNewLabel_1 = new JLabel("Titre");
		lblNewLabel_1.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel_1.setBounds(99, 66, 61, 15);
		contentPane.add(lblNewLabel_1);
		
		textFieldTitre = new JTextField();
		textFieldTitre.setBounds(170, 65, 225, 19);
		contentPane.add(textFieldTitre);
		textFieldTitre.setColumns(10);
		
		buttonEnreg = new JButton("Enregistrer");
		buttonEnreg.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String isbn = textFieldIsbn.getText();
				String titre = textFieldTitre.getText();
				String editeur = textFieldEditeur.getText();
				String dateEdition = textFieldDate.getText();
				
				// recuperation liste mots cles
				Object[] m =listMotcle.getSelectedValues();

				String[] mots = new String[m.length];
				for(int i = 0; i < m.length; i++){
					mots[i] = m[i].toString().toLowerCase();
				}
				//recuperation liste auteurs
				m = listAuteur.getSelectedValues();
	
				String[] aus = new String[m.length];
				for(int i = 0; i < m.length; i++){
					aus[i] = m[i].toString().toLowerCase();
				}
				
				getControleur().nouvOuvrage(isbn, titre, aus, editeur, dateEdition, mots);
				}
		});
		buttonEnreg.setBounds(288, 677, 107, 25);
		contentPane.add(buttonEnreg);
		
		buttonAnnuler = new JButton("Annuler");
		buttonAnnuler.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			getControleur().fermerVue(VueSaisieOuvrage.this);}
		});
		buttonAnnuler.setBounds(99, 677, 107, 25);
		contentPane.add(buttonAnnuler);
		
		JLabel lblNewLabel_2 = new JLabel("Date Edition (MM/AAAA)");
		lblNewLabel_2.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNewLabel_2.setBounds(6, 125, 154, 33);
		contentPane.add(lblNewLabel_2);
		
		textFieldDate = new JTextField();
		textFieldDate.setBounds(170, 132, 114, 19);
		contentPane.add(textFieldDate);
		textFieldDate.setColumns(10);
		
		JLabel lblEditeur = new JLabel("Editeur");
		lblEditeur.setHorizontalAlignment(SwingConstants.RIGHT);
		lblEditeur.setBounds(99, 98, 61, 15);
		contentPane.add(lblEditeur);
		
		textFieldEditeur = new JTextField();
		textFieldEditeur.setColumns(10);
		textFieldEditeur.setBounds(170, 96, 218, 19);
		contentPane.add(textFieldEditeur);
		
		lblMotsCles = new JLabel("Mots cles :");
		lblMotsCles.setBounds(80, 192, 80, 25);
		contentPane.add(lblMotsCles);
		
		JLabel lblmaintenaitAltEnfonce = new JLabel("(maintenir Ctrl enfonce pour )");
		lblmaintenaitAltEnfonce.setFont(new Font("Dialog", Font.PLAIN, 10));
		lblmaintenaitAltEnfonce.setBounds(12, 217, 154, 19);
		contentPane.add(lblmaintenaitAltEnfonce);
		
		btnAjoutMotcle = new JButton("Ajouter Mot cle");
		btnAjoutMotcle.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String mot = textFieldMot.getText().toLowerCase();
				getControleur().ajoutMotcle(mot);
			}
		});
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPane.setBounds(171, 195, 247, 99);
		contentPane.add(scrollPane);
		
		listMotcle = new JList(dlm);
		scrollPane.setViewportView(listMotcle);

		
		btnAjoutMotcle.setBounds(288, 340, 147, 25);
		contentPane.add(btnAjoutMotcle);
		
		textFieldMot = new JTextField();
		textFieldMot.setColumns(10);
		textFieldMot.setBounds(170, 303, 163, 25);
		contentPane.add(textFieldMot);
		
		JLabel label = new JLabel("Mot Cle a ajouter : ");
		label.setBounds(37, 305, 123, 20);
		contentPane.add(label);
		
		btnSupprimer = new JButton("Supprimer Mot cle");
		btnSupprimer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Object[] m =listMotcle.getSelectedValues();
				String[] mots = new String[m.length];
				String s;
				for(int i = 0; i < m.length; i++){
					s = (String)m[i];
					mots[i] = s.toLowerCase();
				}
				getControleur().supprimerMotcle(mots);
			}
		});
		btnSupprimer.setBounds(47, 340, 147, 25);
		contentPane.add(btnSupprimer);
		
		JLabel lblSelectionnerPlusieursItems = new JLabel("selectionner plusieurs items)");
		lblSelectionnerPlusieursItems.setFont(new Font("Dialog", Font.PLAIN, 10));
		lblSelectionnerPlusieursItems.setBounds(6, 229, 154, 19);
		contentPane.add(lblSelectionnerPlusieursItems);
		
		JScrollPane scrollPaneAuteur = new JScrollPane();
		scrollPaneAuteur.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPaneAuteur.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPaneAuteur.setBounds(170, 414, 247, 99);
		contentPane.add(scrollPaneAuteur);
		
		listAuteur = new JList(dlmAuteur);
		scrollPaneAuteur.setViewportView(listAuteur);
		
		JLabel lblAuteurs = new JLabel("Auteurs :");
		lblAuteurs.setBounds(80, 416, 80, 25);
		contentPane.add(lblAuteurs);
		
		textFieldNom = new JTextField();
		textFieldNom.setColumns(10);
		textFieldNom.setBounds(170, 525, 163, 25);
		contentPane.add(textFieldNom);
		
		JLabel lblNomAuteur = new JLabel("Nom auteur :");
		lblNomAuteur.setBounds(69, 527, 91, 20);
		contentPane.add(lblNomAuteur);
		
		JLabel lblPrenomAuteur = new JLabel("Prenom auteur :");
		lblPrenomAuteur.setBounds(53, 564, 107, 20);
		contentPane.add(lblPrenomAuteur);
		
		textFieldPrenom = new JTextField();
		textFieldPrenom.setColumns(10);
		textFieldPrenom.setBounds(170, 562, 163, 25);
		contentPane.add(textFieldPrenom);
		
		JButton btnSupprimerAuteur = new JButton("Supprimer auteur");
		btnSupprimerAuteur.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Object[] o = listAuteur.getSelectedValues();
				String[] noms = new String[o.length];
				for(int i = 0; i < o.length; i++){
					noms[i] = (String)o[i];
				}
				getControleur().supprimerAuteur(noms);
			}
		});
		btnSupprimerAuteur.setBounds(47, 596, 147, 25);
		contentPane.add(btnSupprimerAuteur);
		
		JButton btnAjouterAuteur = new JButton("Ajouter auteur");
		btnAjouterAuteur.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String nom = textFieldNom.getText().toLowerCase();
				String prenom = textFieldPrenom.getText().toLowerCase();
				getControleur().ajoutAuteur(nom, prenom);
			}
		});
		btnAjouterAuteur.setBounds(288, 596, 147, 25);
		contentPane.add(btnAjouterAuteur);
		
	}
	
	public void setEtat (int etat){
		switch (etat) {
		case initiale: {
			buttonEnreg.setEnabled(true);
			buttonAnnuler.setEnabled(true);
			break;
			}
		}
	}
	
	public void alimenteMotcle(SortedMap<String, Motcle> dico) {
		dlm.clear();
		textFieldMot.setText("");
		for (Motcle motcle : dico.values()) {
			dlm.addElement(motcle.getMotCle());
		}
	}
	
	public void alimenteAuteur(SortedMap<String, Auteur> dico) {
		dlmAuteur.clear();
		textFieldNom.setText("");
		textFieldPrenom.setText("");
		for (Auteur auteur : dico.values()) {
			dlmAuteur.addElement(auteur.getNom());
		}
	}
}
